using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Matrix.Notification.Application.Contracts.Notifications.Dto;
using Matrix.Notification.Notifications.Dto;

namespace Matrix.Notification.Application.Notifications.Interfaces
{
    /// <summary>
    /// 通知统计应用服务接口
    /// </summary>
    public interface INotificationStatisticsAppService : IApplicationService
    {
        /// <summary>
        /// 获取整体通知统计信息
        /// </summary>
        Task<NotificationStatisticsDto> GetOverallStatisticsAsync(GetNotificationStatisticsInput input);

        /// <summary>
        /// 获取用户通知统计信息
        /// </summary>
        Task<UserNotificationStatisticsDto> GetUserStatisticsAsync(GetUserNotificationStatisticsInput input);

        /// <summary>
        /// 获取通知批次统计信息
        /// </summary>
        Task<NotificationBatchStatisticsDto> GetBatchStatisticsAsync(GetBatchStatisticsInput input);

        /// <summary>
        /// 获取订阅统计信息
        /// </summary>
        Task<NotificationSubscriptionStatisticsDto> GetSubscriptionStatisticsAsync(GetSubscriptionStatisticsInput input);

        /// <summary>
        /// 获取实时统计信息
        /// </summary>
        Task<RealTimeStatisticsDto> GetRealTimeStatisticsAsync();

        /// <summary>
        /// 获取性能统计信息
        /// </summary>
        Task<PerformanceStatisticsDto> GetPerformanceStatisticsAsync(GetPerformanceStatisticsInput input);

        /// <summary>
        /// 获取趋势统计信息
        /// </summary>
        Task<TrendStatisticsDto> GetTrendStatisticsAsync(GetTrendStatisticsInput input);

        /// <summary>
        /// 获取清理统计信息
        /// </summary>
        Task<NotificationCleanupResultDto> GetCleanupStatisticsAsync(GetCleanupStatisticsInput input);
    }
}